package br.com.fogas.medicao.business;

import java.sql.SQLException;
import java.util.List;

import android.support.v4.app.FragmentManager;
import br.com.fogas.database.FogasDatabase;
import br.com.fogas.database.entidade.Cliente;
import br.com.fogas.database.entidade.Medidor;
import br.com.fogas.database.entidade.PlanoVisitas;
import br.com.fogas.database.enums.PlanoVisitaStatusEnum;
import br.com.fogas.medicao.activity.PlanoLocalFragment;
import br.com.fogas.medicao.application.Constants;
import br.com.fogas.medicao.application.LoadFragment;
import br.com.fogas.utils.task.ServiceTask;
import br.com.fogas.utils.task.ServiceTaskBusiness;

public class CriarPlanoVisitaBusiness implements ServiceTaskBusiness {

	private FogasDatabase database;
	private FragmentManager manager;
	
	private List<Cliente> locais;
	
	public CriarPlanoVisitaBusiness(FragmentManager manager, FogasDatabase database) {
		this.database = database;
		this.manager = manager;
	}
	
	@Override
	public void start(ServiceTask serviceTask) {
		try {
			planoLocal();
			planoClientes();
			direcionarPlanoLocal();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	private void planoLocal() throws SQLException {
		this.locais = database.getCliente().listarLocais(); 
		
		for (Cliente local : locais) {
			PlanoVisitas plano = new PlanoVisitas();
			plano.setCliente(local);
			plano.setCs_Local(true);
			plano.setCs_Visitar(true);
			plano.setStatus(PlanoVisitaStatusEnum.PENDENTE.getId());
			database.getPlanoVisitas().create(plano);
		}
	}
	
	private void planoClientes() throws SQLException {
		for (Cliente local : locais) {
			List<Cliente> clientes = database.getCliente().listarClientesPorLocal(local);
			
			for (Cliente cliente : clientes) {
				PlanoVisitas plano = new PlanoVisitas();
				plano.setCliente(cliente);
				plano.setLocal(local);
				plano.setCs_Local(false);
				plano.setCs_Visitar(true);
				plano.setStatus(PlanoVisitaStatusEnum.PENDENTE.getId());
				database.getPlanoVisitas().create(plano);
				
				List<Medidor> medidores = database.getMedidor().listarMedidoresPorCliente(cliente);
				for (Medidor medidor : medidores) {
					medidor.setTx_plano_visita(plano);
					database.getMedidor().update(medidor);
				}
			}
		}
	}
	
	private void direcionarPlanoLocal() {
		LoadFragment loadFragment = new LoadFragment(manager);
		loadFragment.initializeFragment(true, new PlanoLocalFragment(), Constants.FRAGMENT_PLANO_LOCAL);
	}
}